home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Freelog 115
/
FreelogNo115-MaiJuin2013.iso
/
Internet
/
AvantBrowser
/
asetup.exe
/
_data
/
webkit
/
chrome_100_percent.pak
/
Unnamed File 000027.txt
< prev
next >
Wrap
Text File
|
2013-04-03
|
3KB
|
92 lines
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Custom bindings for the Permissions API.
var chromeHidden = requireNative('chrome_hidden').GetChromeHidden();
var sendRequest = require('sendRequest').sendRequest;
var lastError = require('lastError');
// These custom bindings are only necessary because it is not currently
// possible to have a union of types as the type of the items in an array.
// Once that is fixed, this entire file should go away.
// See,
// https://code.google.com/p/chromium/issues/detail?id=162044
// https://code.google.com/p/chromium/issues/detail?id=162042
// TODO(bryeung): delete this file.
chromeHidden.registerCustomHook('permissions', function(api) {
var apiFunctions = api.apiFunctions;
function maybeConvertToObject(str) {
var parts = str.split('|');
if (parts.length != 2)
return str;
var ret = {};
ret[parts[0]] = JSON.parse(parts[1]);
return ret;
}
function convertObjectPermissionsToStrings() {
if (arguments.length < 1)
return arguments;
var args = arguments[0].permissions;
if (!args)
return arguments;
for (var i = 0; i < args.length; i += 1) {
if (typeof(args[i]) == 'object') {
var a = args[i];
var keys = Object.keys(a);
if (keys.length != 1) {
throw new Error("Too many keys in object-style permission.");
}
arguments[0].permissions[i] = keys[0] + '|' +
JSON.stringify(a[keys[0]]);
}
}
return arguments;
}
// Convert complex permissions to strings so they validate against the schema
apiFunctions.setUpdateArgumentsPreValidate(
'contains', convertObjectPermissionsToStrings);
apiFunctions.setUpdateArgumentsPreValidate(
'remove', convertObjectPermissionsToStrings);
apiFunctions.setUpdateArgumentsPreValidate(
'request', convertObjectPermissionsToStrings);
// Convert complex permissions back to objects
apiFunctions.setCustomCallback('getAll',
function(name, request, response) {
for (var i = 0; i < response.permissions.length; i += 1) {
response.permissions[i] =
maybeConvertToObject(response.permissions[i]);
}
// Since the schema says Permissions.permissions contains strings and
// not objects, validation will fail after the for-loop above. This
// skips validation and calls the callback directly, then clears it so
// that handleResponse doesn't call it again.
if (request.callback)
request.callback.apply(request, [response]);
delete request.callback;
});
// Also convert complex permissions back to objects for events. The
// dispatchToListener call happens after argument validation, which works
// around the problem that Permissions.permissions is supposed to be a list
// of strings.
chrome.permissions.onAdded.dispatchToListener = function(callback, args) {
for (var i = 0; i < args[0].permissions.length; i += 1) {
args[0].permissions[i] = maybeConvertToObject(args[0].permissions[i]);
}
chrome.Event.prototype.dispatchToListener(callback, args);
};
chrome.permissions.onRemoved.dispatchToListener =
chrome.permissions.onAdded.dispatchToListener;
});